<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Vector Template Library (Vtl): W:/Products/Vtl/branches/v1.0/Vtl/Vtl/include/Vtl/impl/common.hpp Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">Vector Template Library (Vtl)
   &#160;<span id="projectnumber">v1.0</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.8.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('common_8hpp.html','');
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">W:/Products/Vtl/branches/v1.0/Vtl/Vtl/include/Vtl/impl/common.hpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="common_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#include &lt;limits.h&gt;</span>
<a name="l00002"></a>00002 
<a name="l00003"></a>00003 <span class="keyword">namespace </span>Vtl
<a name="l00004"></a>00004 {
<a name="l00005"></a>00005         <span class="keyword">namespace </span>common
<a name="l00006"></a>00006         {
<a name="l00007"></a>00007                 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dimension&gt;
<a name="l00008"></a><a class="code" href="namespace_vtl_1_1common.html#aa20b1b529868b63e47d59272d8b50888">00008</a>                 <span class="keyword">inline</span> Scalar <a class="code" href="namespace_vtl_1_1common.html#aa20b1b529868b63e47d59272d8b50888" title="Returns the 2D euclidean distance between two points along the [i,j] plane.">distance2D</a>( <span class="keyword">const</span> Eigen::Matrix&lt;Scalar,Dimension,1&gt; &amp;_P0, 
<a name="l00009"></a>00009                         <span class="keyword">const</span> Eigen::Matrix&lt;Scalar,Dimension,1&gt; &amp;_P1)
<a name="l00010"></a>00010                 {
<a name="l00011"></a>00011                         <span class="keywordflow">return</span> sqrtl(<a class="code" href="namespace_vtl_1_1common.html#ae357ff08de7dcdb59cc6c7d92ac453e0" title="Returns the 2D euclidean squared distance between two points along the [i,j] plane.">sqDistance2D</a>(_P0,_P1));
<a name="l00012"></a>00012                 }
<a name="l00013"></a>00013 
<a name="l00014"></a>00014                 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dimension&gt;
<a name="l00015"></a><a class="code" href="namespace_vtl_1_1common.html#ae357ff08de7dcdb59cc6c7d92ac453e0">00015</a>                 <span class="keyword">inline</span> Scalar <a class="code" href="namespace_vtl_1_1common.html#ae357ff08de7dcdb59cc6c7d92ac453e0" title="Returns the 2D euclidean squared distance between two points along the [i,j] plane.">sqDistance2D</a>( <span class="keyword">const</span> Eigen::Matrix&lt;Scalar,Dimension,1&gt; &amp;_P0, 
<a name="l00016"></a>00016                         <span class="keyword">const</span> Eigen::Matrix&lt;Scalar,Dimension,1&gt; &amp;_P1)
<a name="l00017"></a>00017                 {
<a name="l00018"></a>00018                         <span class="keyword">typedef</span> Eigen::Matrix&lt;Scalar, Dimension, 1&gt; VectorType;
<a name="l00019"></a>00019                         VectorType diff = _P0 -_P1;
<a name="l00020"></a>00020                         Scalar i = diff(0);
<a name="l00021"></a>00021                         Scalar j = diff(1);
<a name="l00022"></a>00022                         <span class="keywordflow">return</span> ((i*i) + (j*j));
<a name="l00023"></a>00023                 }
<a name="l00024"></a>00024 
<a name="l00025"></a>00025                 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dimension&gt;
<a name="l00026"></a><a class="code" href="namespace_vtl_1_1common.html#a1efc29f177e2583d22a574d556919602">00026</a>                 <span class="keyword">inline</span> Scalar <a class="code" href="namespace_vtl_1_1common.html#a1efc29f177e2583d22a574d556919602" title="Returns the euclidean distance between two points.">distance</a>( <span class="keyword">const</span> Eigen::Matrix&lt;Scalar,Dimension,1&gt; &amp;_P0, 
<a name="l00027"></a>00027                         <span class="keyword">const</span> Eigen::Matrix&lt;Scalar,Dimension,1&gt; &amp;_P1)
<a name="l00028"></a>00028                 {
<a name="l00029"></a>00029                         <span class="keywordflow">return</span> sqrtl(<a class="code" href="namespace_vtl_1_1common.html#ade59886f60682779ea447c89b0d5481f" title="Returns the euclidean squared distance between two points.">sqDistance</a>(_P0,_P1));
<a name="l00030"></a>00030                 }
<a name="l00031"></a>00031 
<a name="l00032"></a>00032                 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dimension&gt;
<a name="l00033"></a><a class="code" href="namespace_vtl_1_1common.html#ade59886f60682779ea447c89b0d5481f">00033</a>                 <span class="keyword">inline</span> Scalar <a class="code" href="namespace_vtl_1_1common.html#ade59886f60682779ea447c89b0d5481f" title="Returns the euclidean squared distance between two points.">sqDistance</a>( <span class="keyword">const</span> Eigen::Matrix&lt;Scalar,Dimension,1&gt; &amp;_P0, 
<a name="l00034"></a>00034                         <span class="keyword">const</span> Eigen::Matrix&lt;Scalar,Dimension,1&gt; &amp;_P1)
<a name="l00035"></a>00035                 {
<a name="l00036"></a>00036                         <span class="keyword">typedef</span> Eigen::Matrix&lt;Scalar, Dimension, 1&gt; VectorType;
<a name="l00037"></a>00037                         VectorType diff = _P0 -_P1;
<a name="l00038"></a>00038                         <span class="keywordflow">return</span> diff.squaredNorm();
<a name="l00039"></a>00039                 }
<a name="l00040"></a>00040 
<a name="l00041"></a>00041                 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dimension&gt;
<a name="l00042"></a><a class="code" href="namespace_vtl_1_1common.html#aba64bee77f1cd26116896d19ebed98e7">00042</a>                 <span class="keyword">inline</span> Eigen::Matrix&lt;Scalar, 2,1&gt; <a class="code" href="namespace_vtl_1_1common.html#aba64bee77f1cd26116896d19ebed98e7" title="Converts the given vector to 2D [i,j] only.">convertTo2D</a>(<span class="keyword">const</span> Eigen::Matrix&lt;Scalar, Dimension,1&gt; &amp;_Matrix)
<a name="l00043"></a>00043                 {
<a name="l00044"></a>00044                         <span class="keywordflow">return</span> Eigen::Matrix&lt;Scalar, 2,1&gt;(_Matrix(0), _Matrix(1));
<a name="l00045"></a>00045                 }
<a name="l00046"></a>00046 
<a name="l00047"></a>00047                 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dimension&gt;
<a name="l00048"></a><a class="code" href="namespace_vtl_1_1common.html#a3b765a528d3816d162a9f6010085e8ec">00048</a>                 <span class="keyword">inline</span> Eigen::ParametrizedLine&lt;Scalar, 2&gt; <a class="code" href="namespace_vtl_1_1common.html#aba64bee77f1cd26116896d19ebed98e7" title="Converts the given vector to 2D [i,j] only.">convertTo2D</a>(<span class="keyword">const</span> Eigen::ParametrizedLine&lt;Scalar, Dimension&gt; &amp;_Line)
<a name="l00049"></a>00049                 {
<a name="l00050"></a>00050                         <span class="keywordflow">return</span> Eigen::ParametrizedLine&lt;Scalar, 2&gt;(<a class="code" href="namespace_vtl_1_1common.html#aba64bee77f1cd26116896d19ebed98e7" title="Converts the given vector to 2D [i,j] only.">convertTo2D</a>(_Line.origin()), <a class="code" href="namespace_vtl_1_1common.html#aba64bee77f1cd26116896d19ebed98e7" title="Converts the given vector to 2D [i,j] only.">convertTo2D</a>(_Line.direction()));
<a name="l00051"></a>00051                 }
<a name="l00052"></a>00052 
<a name="l00053"></a>00053                 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dimension&gt;
<a name="l00054"></a><a class="code" href="namespace_vtl_1_1common.html#a098b2df81e6cc14cbf9697452e836f93">00054</a>                 <span class="keyword">inline</span> Eigen::Matrix&lt;Scalar, 3,1&gt; <a class="code" href="namespace_vtl_1_1common.html#a098b2df81e6cc14cbf9697452e836f93" title="Converts the given vector to 3D using the given K value for [i,j, K].">convertTo3D</a>(<span class="keyword">const</span> Eigen::Matrix&lt;Scalar, Dimension,1&gt; &amp;_Matrix, <span class="keyword">const</span> Scalar &amp;_K <span class="comment">/*= 0.0*/</span>)
<a name="l00055"></a>00055                 {
<a name="l00056"></a>00056                         <span class="keywordflow">if</span>(Dimension&lt;3)
<a name="l00057"></a>00057                         {
<a name="l00058"></a>00058                                 <span class="keywordflow">return</span> Eigen::Matrix&lt;Scalar, 3,1&gt;(_Matrix(0), _Matrix(1), _K);
<a name="l00059"></a>00059                         }
<a name="l00060"></a>00060                         <span class="keywordflow">return</span> Eigen::Matrix&lt;Scalar, 3,1&gt;(_Matrix(0), _Matrix(1), _Matrix(2));
<a name="l00061"></a>00061                 }
<a name="l00062"></a>00062 
<a name="l00063"></a>00063                 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dimension&gt;
<a name="l00064"></a><a class="code" href="namespace_vtl_1_1common.html#aefb46ca75cbf291e08fe6ed8cf7b8cc5">00064</a>                 <span class="keyword">inline</span> Eigen::ParametrizedLine&lt;Scalar, 3&gt; <a class="code" href="namespace_vtl_1_1common.html#a098b2df81e6cc14cbf9697452e836f93" title="Converts the given vector to 3D using the given K value for [i,j, K].">convertTo3D</a>(<span class="keyword">const</span> Eigen::ParametrizedLine&lt;Scalar, Dimension&gt; &amp;_Line, <span class="keyword">const</span> Scalar &amp;_K <span class="comment">/*= 0.0*/</span>)
<a name="l00065"></a>00065                 {
<a name="l00066"></a>00066                         <span class="keywordflow">return</span> Eigen::ParametrizedLine&lt;Scalar, 3&gt;(<a class="code" href="namespace_vtl_1_1common.html#a098b2df81e6cc14cbf9697452e836f93" title="Converts the given vector to 3D using the given K value for [i,j, K].">convertTo3D</a>(_Line.origin(), _K), <a class="code" href="namespace_vtl_1_1common.html#a098b2df81e6cc14cbf9697452e836f93" title="Converts the given vector to 3D using the given K value for [i,j, K].">convertTo3D</a>(_Line.direction(), _K));
<a name="l00067"></a>00067                 }
<a name="l00068"></a>00068 
<a name="l00069"></a>00069                 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Scalar&gt;
<a name="l00070"></a><a class="code" href="namespace_vtl_1_1common.html#aa8276eb0073da6f253947f0371e08ac9">00070</a>                 <span class="keyword">inline</span> Scalar <a class="code" href="namespace_vtl_1_1common.html#aa8276eb0073da6f253947f0371e08ac9" title="Generates uniformly distributed pseudo-random number.">random</a>()
<a name="l00071"></a>00071                 {
<a name="l00072"></a>00072                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> number;
<a name="l00073"></a>00073                         rand_s(&amp;number);
<a name="l00074"></a>00074                         <span class="keywordflow">return</span> (Scalar(number)/(Scalar(UINT_MAX) + Scalar(1)));
<a name="l00075"></a>00075                 }
<a name="l00076"></a>00076 
<a name="l00077"></a>00077                 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Scalar&gt;
<a name="l00078"></a><a class="code" href="namespace_vtl_1_1common.html#ae54d2022e9e1f9001a866855dc3798aa">00078</a>                 <span class="keyword">inline</span> Scalar <a class="code" href="namespace_vtl_1_1common.html#ae54d2022e9e1f9001a866855dc3798aa" title="Generates uniformly distributed pseudo-random number between the given range.">rangedRandom</a>(<span class="keyword">const</span> Scalar &amp;_MinValue <span class="comment">/*= Scalar(-1)*/</span>, <span class="keyword">const</span> Scalar &amp;_MaxValue <span class="comment">/*= Scalar(1)*/</span>)
<a name="l00079"></a>00079                 {
<a name="l00080"></a>00080                         <span class="keyword">const</span> Scalar scale_factor = _MaxValue - _MinValue;
<a name="l00081"></a>00081                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> number;
<a name="l00082"></a>00082                         rand_s(&amp;number);
<a name="l00083"></a>00083                         <span class="keywordflow">return</span> (_MinValue + (scale_factor * (Scalar(number)/Scalar(UINT_MAX))));
<a name="l00084"></a>00084                 }
<a name="l00085"></a>00085 
<a name="l00086"></a>00086                 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dimension&gt;
<a name="l00087"></a><a class="code" href="namespace_vtl_1_1common.html#a03762ff5999a0c0022827ba0588004ec">00087</a>                 <span class="keyword">inline</span> Eigen::Matrix&lt;Scalar, Dimension, 1&gt; <a class="code" href="namespace_vtl_1_1common.html#a03762ff5999a0c0022827ba0588004ec" title="Generates uniformly distributed pseudo-random vector within the distribution radius given...">randomVector</a>(<span class="keyword">const</span> Scalar &amp;_Scale <span class="comment">/*= Scalar(1)*/</span>)
<a name="l00088"></a>00088                 {
<a name="l00089"></a>00089                         Eigen::Matrix&lt;Scalar, Dimension, 1&gt; vector;
<a name="l00090"></a>00090                         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0;i&lt;Dimension;i++)
<a name="l00091"></a>00091                         {
<a name="l00092"></a>00092                                 vector(i) = _Scale * rangedRandom&lt;Scalar&gt;();
<a name="l00093"></a>00093                         }
<a name="l00094"></a>00094                         <span class="keywordflow">return</span> vector;
<a name="l00095"></a>00095                 }
<a name="l00096"></a>00096         };
<a name="l00097"></a>00097 };
</pre></div></div><!-- contents -->
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="common_8hpp.html">common.hpp</a>      </li>

    <li class="footer">Generated on Sun Apr 22 2012 14:58:32 for Vector Template Library (Vtl) by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.0 </li>
   </ul>
 </div>


</body>
</html>
